package dao

import (
	"time"
)

// 这是 OpenProject 的全局公开dao对象，被service层调用!
var OpenProjectDao = openProjectDao{}

// 开源项目
// 这是 open_project表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type OpenProject struct {
	Id            int32     `json:"id" form:"id" db:"id" v:"id"`                                                     // 项目id
	Name          string    `json:"name" form:"name" db:"name" v:"name"`                                             // 项目名(软件名),如 Docker
	Category      string    `json:"category" form:"category" db:"category" v:"category"`                             // 项目类别,如 Linux容器引擎
	Uri           string    `json:"uri" form:"uri" db:"uri" v:"uri"`                                                 // 项目uri，访问使用（如/p/docker 中的 docker)
	Home          string    `json:"home" form:"home" db:"home" v:"home"`                                             // 项目首页
	Doc           string    `json:"doc" form:"doc" db:"doc" v:"doc"`                                                 // 项目文档地址
	Download      string    `json:"download" form:"download" db:"download" v:"download"`                             // 项目下载地址
	Src           string    `json:"src" form:"src" db:"src" v:"src"`                                                 // 项目源码地址
	Logo          string    `json:"logo" form:"logo" db:"logo" v:"logo"`                                             // 项目logo
	Desc          string    `json:"desc" form:"desc" db:"desc" v:"desc"`                                             // 项目描述
	Repo          string    `json:"repo" form:"repo" db:"repo" v:"repo"`                                             // 源码uri部分，方便repo widget插件使用
	Author        string    `json:"author" form:"author" db:"author" v:"author"`                                     // 作者
	Licence       string    `json:"licence" form:"licence" db:"licence" v:"licence"`                                 // 授权协议
	Lang          string    `json:"lang" form:"lang" db:"lang" v:"lang"`                                             // 开发语言
	Os            string    `json:"os" form:"os" db:"os" v:"os"`                                                     // 操作系统(多个逗号分隔)
	Tags          string    `json:"tags" form:"tags" db:"tags" v:"tags"`                                             // tag，逗号分隔
	Username      string    `json:"username" form:"username" db:"username" v:"username"`                             // 收录人
	ViewNum       int32     `json:"view_num" form:"view_num" db:"view_num" v:"view_num"`                             // 浏览数
	CmtNum        int32     `json:"cmt_num" form:"cmt_num" db:"cmt_num" v:"cmt_num"`                                 // 评论数
	LikeNum       int32     `json:"like_num" form:"like_num" db:"like_num" v:"like_num"`                             // 点赞数
	LastReplyUid  int32     `json:"last_reply_uid" form:"last_reply_uid" db:"last_reply_uid" v:"last_reply_uid"`     // 最后回复者
	LastReplyTime time.Time `json:"last_reply_time" form:"last_reply_time" db:"last_reply_time" v:"last_reply_time"` // 最后回复时间
	Status        int8      `json:"status" form:"status" db:"status" v:"status"`                                     // 状态:0-新建,1-已上线；2-下线(审核拒绝)
	Ctime         time.Time `json:"ctime" form:"ctime" db:"ctime" v:"ctime"`                                         // 加入时间
	Mtime         time.Time `json:"mtime" form:"mtime" db:"mtime" v:"mtime"`
}

// 注意:这是 OpenProject 的私有dao对象，只能在dao层内使用!
type openProjectDao struct {
	InsertTemplate func(arg OpenProject) (int64, error)             //插入一条记录
	UpdateTemplate func(arg OpenProject) (int64, error)             //更新一条记录
	DeleteTemplate func(id int64) (int64, error)                    `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (OpenProject, error)              `arg:"id"` //根据传入的主键获取一条记录
	List           func(arg OpenProjectList) ([]OpenProject, error) //模糊分页查询
}

/*
// 这是 open_project 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type OpenProjectPostman struct {
id
name
category
uri
home
doc
download
src
logo
desc
repo
author
licence
lang
os
tags
username
view_num
cmt_num
like_num
last_reply_uid
last_reply_time
status
ctime
mtime

}*/

// 这是 open_project 表的批量请求参数
type OpenProjectReq struct {
	List []OpenProject `json:"list" form:"list"`
}

// 这是 openProjectDao.List()方法的请求参数
type OpenProjectList struct {
	Page
}
